#ifndef __CODE_3_AD__
#define __CODE_3_AD__

#include "../src/type/Type.hpp"
#include "../src/SymbTable.hpp"

typedef enum {
  OPCODE_NONE = 0, /*        nop (ne rien faire) */
  OPCODE_ADD ,     /*     1   x := y + z          */
  OPCODE_SUB ,     /*     2   x := y - z          */
  OPCODE_MUL ,     /*     3   x := y * z          */
  OPCODE_DIV ,     /*     4   x := y / z          */
  OPCODE_NEG ,     /*     5   x := - y            */
  OPCODE_AND ,     /*     6   x := y & z          */
  OPCODE_OR  ,     /*     7   x := y | z          */
  OPCODE_NOT ,     /*     8   x := ! y            */
  OPCODE_CPY ,     /*     9   x := y              */
  OPCODE_LT ,      /*     10   x := y < z          */
  OPCODE_GT ,      /*     11   x := y > z          */
  OPCODE_LE ,      /*     12   x := y <= z         */
  OPCODE_GE ,      /*     13   x := y >= z         */
  OPCODE_EQ ,      /*     14   x := y == z         */
  OPCODE_NEQ ,     /*     15   x := y != z         */
  OPCODE_JMP ,     /*     16   aller a x           */
  OPCODE_JMPC ,    /*     17   si x aller a y      */
  OPCODE_ART ,     /*     18   x := y [ z ]        */
  OPCODE_ALT ,     /*     19   x [ y ] := z        */
  OPCODE_PTR ,     /*     20   x := & y            */
  OPCODE_RRT ,     /*     21   x := * y            */
  OPCODE_RLT ,     /*     22   * x := y            */
  OPCODE_PSH ,     /*     23   push x              */
  OPCODE_PSA ,     /*     24   push x [ y ]        */
  OPCODE_PSP ,     /*     25   push & x            */
  OPCODE_PSR ,     /*     26   push * x            */
  OPCODE_POP ,     /*     27   pop x               */
  OPCODE_PPA ,     /*     28   pop x [ y ]         */
  OPCODE_PPR ,     /*     29   pop * x             */
  OPCODE_CLL ,     /*     30   call x              */
  OPCODE_RET ,     /*     31   return              */
  OPCODE_RETV ,    /*     32   return x            */
  OPCODE_END       /*     33   end                 */
} CodeInstruction;

class LexToBison{
	public:
		SymbTable * ts_c;
		int id;
    //ajouter par le parser dans
    int type;
};
class c3a{
	
	public : 
	int type;

    char   ch;
	char * chet;
    int    i;
    long   l;
    float  f;
    double d;
	bool b;
  int id;
  int idres;
	
	bool calcule;
};

#endif
